草庐IT

C++11 auto 和 size_type

全部标签

Qt : has initializer but incomplete type 中的 C++ 错误

voidFindWords::getTextFile(){QFilemyFile(":/FindingWords2.txt");myFile.open(QIODevice::ReadOnly);QTextStreamtextStream(&myFile);QStringline=textStream.readAll();myFile.close();ui->textEdit->setPlainText(line);QTextCursortextCursor=ui->textEdit->textCursor();textCursor.movePosition(QTextCursor::S

返回类型的 C++11 方法模板特化

我有以下类(class):classFoo{public:templateTbar(){cout它的调用方式如下:Foofoo;inti=foo.bar();longl=foo.bar();现在我想对使用shared_ptr调用函数的情况进行不同的专门化处理Foofoo;foo.bar>();foo.bar>();但我当然不想为每种类型创建完全特化。是否有可能实现此类行为(如果需要,可以基于特征)? 最佳答案 您不能部分特化函数。有关原因的故事,请查看此GOTW.虽然您可以部分特化类,所以您可以做的是:templateTbar(){

c++ - 如何在 C++11 lambda 中跟踪对象生命周期?

有时,我们对捕获对象状态的lambda的生命周期一无所知(例如,从对象返回它,将其注册为回调而无法取消订阅等)。如何确保lambda不会在调用时访问已销毁的对象?#include#include#includeclassFoo{public:Foo(conststd::string&i_name):name(i_name){}std::functionGetPrinter(){return[this](){std::coutf;{autofoo=std::make_shared("OK");f=foo->GetPrinter();}autofoo=std::make_shared("W

c++ - 为什么 C++11 允许二次初始化

在C++11下,可以在声明时直接初始化类成员。但是在构造函数的初始化列表中再次初始化它们也是可以的……为什么?#includestructMyStr{MyStr():j(0){std::cout因为这样做是错误的,可以理解:MyStr():j(0),j(1){}第一个示例有何不同,其中数据成员在声明时被初始化,然后在构造函数的初始化列表中再次初始化? 最佳答案 实际上只有一个初始化发生。只是允许您以brace-or-equalsinitializer的形式编写一个“默认”初始化器,但是如果您的构造函数初始化器列表也指定了一个初始化器

C++11 自动和函数返回类型

我知道auto、auto&、constauto和constauto&之间的区别(例如一个“foreach”循环),但令我惊讶的是:std::stringbla;conststd::string&cf(){returnbla;}intmain(intargc,char*argv[]){autos1=cf();conststd::string&s2=cf();s1+="XXX";//notanerrors2+="YYY";//errorasexpected}有人能告诉我当表达式autox=fun();中的x类型与返回类型不同时fun()的值? 最佳答案

c++ - 在 C++11 中将 std::function/mem_fn 与成员函数一起使用

长话短说,是否有一种简单/定义的方式来以流线型方式处理函数对象/lambda和成员函数?如果我理解正确,如果我使用std::mem_fn,我需要将正确类型的对象传递给函数调用,即Objecto;ftncallstd::mem_fun(&Object::function);ftncall(o);理想情况下,会有一些方法可以将o“附加”到该函数对象,也许作为std::weak_ptr,这样我们就知道o是否被删除了。例如,如果有一种方法可以像这样模糊地做一些事情:Objecto;ftncallstd::mem_fn(&Object::function,o);//Ormaybestd::mem

c++ - 为什么在 C++11 中需要 decltype?

我正在学习C++11中的decltype。auto和decltype的功能似乎是重复的,我不明白为什么我们需要decltype。根据wiki,它的主要用途是在泛型编程中,在这种编程中通常很难甚至不可能表达依赖于模板参数的类型。在泛型编程中,当难以表达类型时,我可以使用auto:templatevoidMakeAnObject(constT&builder){autoval=builder.MakeObject();//dostuffwithval}我不明白为什么需要decltype。decltype可以做一些auto做不到的事情吗? 最佳答案

c++ - std::ofstream == NULL 不会为 -std=gnu++11 编译,任何解决方法?

考虑以下代码:std::ostreamfile;if(file==NULL)std::cout它在通过-std=gnu11(GCC5.2的默认值)或仅使用时完美编译gcccode.cpp-oa.out.不过,-std=gnu++11失败了:nomatchfor‘operator==’(operandtypesare‘std::ofstream{akastd::basic_ofstream}’and‘longint’)`最简单的解决方法是什么?详细信息:我必须使用std=gnu++11才能访问shared_ptr定义。此外,我的一些代码是自动生成的,修改生成器会付出合理的努力-所以我想知

c++ - C++11 是否支持模板中的类型递归?

我想详细解释一下这个问题。在许多具有强类型系统的语言(如Felix、Ocaml、Haskell)中,您可以通过组合类型构造函数来定义多态列表。这是Felix的定义:typedeflist[T]=1+T*list[T];typedeflist[T]=(1+T*self)asself;在Ocaml中:type'alist=Empty|Cons('a,'alist)在C中,这是递归的,但既不是多态的也不是组合的:structint_list{intelt;structint_list*next;};在C++中,如果C++支持类型递归,它会像这样完成:structunit{};template

c++ - "' void* ' is not a pointer-to-object type"在没有 void* 的代码中?

我的代码有问题。在Xcode或使用C++11编译器中,此代码运行良好。但是,当我将此代码提交给在线法官时,判决显示“编译错误”。我认为他们使用的是C++4.7.1编译器,当我尝试编译它(使用Ideone)时,它说:prog.cpp:Infunction'voidprintArray(int)':prog.cpp:27:error:'void*'isnotapointer-to-objecttypeprog.cpp:27:error:'void*'isnotapointer-to-objecttypeprog.cpp:27:error:'void*'isnotapointer-to-ob